package hero.mps.leet_code_20;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;

public class ValidParentTheses {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            // 如果字符是左括号（小括号、大括号或方括号）
            if (c == '(' || c == '{' || c == '[') {
                // 将左括号压入栈中
                stack.push(c);
            } else {
                // 如果栈为空，则返回false，表示括号不匹配
                if (stack.isEmpty()) return false;
                // 弹出栈顶元素
                char top = stack.pop();
                // 判断右括号与栈顶元素是否匹配
                if (c == ')' && top != '(' ||
                    c == '}' && top != '{' ||
                    c == ']' && top != '[') return false;
            }
        }
        // 如果栈为空，表示所有括号都匹配成功，返回true；否则返回false
        return stack.isEmpty();
    }

    public boolean isValid1(String s) {
        Deque<Character> stack = new ArrayDeque<>();
        for (char c : s.toCharArray()) {
            // 如果字符是左括号（小括号、大括号或方括号）
            if (c == '(' || c == '{' || c == '[') {
                // 将左括号压入栈中
                stack.push(c);
            } else {
                // 如果栈为空，则返回false，表示括号不匹配
                if (stack.isEmpty()) return false;
                // 弹出栈顶元素
                char top = stack.pop();
                // 判断右括号与栈顶元素是否匹配
                if (c == ')' && top != '(' ||
                        c == '}' && top != '{' ||
                        c == ']' && top != '[') return false;
            }
        }
        // 如果栈为空，表示所有括号都匹配成功，返回true；否则返回false
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        System.out.println(new ValidParentTheses().isValid("())[]{}"));
    }
}
